/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package edu.ub.informatica.disseny.movieaff.Controlador;
import edu.ub.informatica.disseny.movieaff.modelo.Actor;
import edu.ub.informatica.disseny.movieaff.modelo.Administrador;
import edu.ub.informatica.disseny.movieaff.modelo.Catalogo;
import edu.ub.informatica.disseny.movieaff.modelo.Cliente;
import edu.ub.informatica.disseny.movieaff.modelo.Director;
import edu.ub.informatica.disseny.movieaff.modelo.Genero;
import edu.ub.informatica.disseny.movieaff.modelo.Pelicula;
import edu.ub.informatica.disseny.movieaff.modelo.Productora;
import edu.ub.informatica.disseny.movieaff.modelo.Valoracion;
import java.util.ArrayList;

 /*
 * 
 */
public class MovieAffController {

    private MovieAffDataManager dataManager;
    private Catalogo catalogo;
    private ArrayList<Cliente> listClientes;
    private ArrayList listaValoraciones;
    private Productora prod;
    private ArrayList<Genero> listaGeneros;
    private ArrayList<Administrador> administradores;

    public MovieAffController() {

        catalogo = new Catalogo();
        listClientes = new ArrayList();
        listaValoraciones = new ArrayList();
        listaGeneros = new ArrayList();
        dataManager = new MovieAffDataManager();
        administradores = new ArrayList();
        dataManager.obtenirDades("data/MovieAff.xml", this);

    }
    
    
      public void crearCliente(String id, String nom, String dni, String adreca, String usuari, String password, String vip, String faltes) {
        int ide = listClientes.size();
        ide++;
        id = Integer.toString(ide);
        Cliente client;
        client = new Cliente(id, nom, dni, adreca, usuari, password, vip, faltes);
        listClientes.add(client);
        
    }

    public void crearValoracion(String id, String client, String film, String puntuacio, String data) {
        int ide = listaValoraciones.size();
        ide++;
        id = Integer.toString(ide);
        Valoracion valoracion = new Valoracion (id, client, film, puntuacio, data);
        listaValoraciones.add(valoracion);
        for (int i = 0; i < catalogo.tamaño(); i++){
            if (catalogo.getPelicula(i).getId().equals(film)){
                catalogo.getPelicula(i).addValoracion(valoracion);
            }
        }
        for (int i = 0; i < listClientes.size(); i++){
             if (listClientes.get(i).getUsuari().equals(client)){
                 listClientes.get(i).addValoracion(valoracion);
             }
        }
        System.out.println("Valoración introducida");
    }

   void crearMovie(String id, String mins, String year, String title, String desc) {
        Pelicula pelicula;
        pelicula = new Pelicula (id, mins, year, title, desc);
        catalogo.añadirPelicula(pelicula);
    }
    
    
    void crearAdmin(String id, String nom, String usuari, String password) {
       Administrador admin = new Administrador(id, nom, usuari, password);
       administradores.add(admin);
    }

    void crearProductora(String id, String nom, String idMovie) {
        Productora productora = new Productora (id, nom, idMovie);
        for (int i = 0; i < catalogo.tamaño(); i++){
            if (catalogo.getPelicula(i).getId().equals(idMovie)){
                catalogo.getPelicula(i).setProductora(productora);
            }
        }
    }

    void crearArtista(String id, String nom, String tipus, String idMovie) {
        double cache = 0;
        String nombreArtistico = "nom artístic";
        switch (tipus) {
            case "director":
                Director director = new Director(id, nom, tipus, idMovie, cache);
                for (int i=0; i < catalogo.tamaño(); i++){
                    if (catalogo.getPelicula(i).getId().equals(director.getIdMovie())){
                        catalogo.getPelicula(i).addDirector(director);
                    }
                }
                break;
            case "actor":
                Actor actor = new Actor (id, nom, tipus, idMovie, cache ,nombreArtistico );
                for (int i=0; i < catalogo.tamaño(); i++){
                    if (catalogo.getPelicula(i).getId().equals(actor.getIdMovie())){
                        catalogo.getPelicula(i).addActor(actor);
                    }
                }
                break;
        }
       
    }

    void crearGenere(String id, String nom, String idMovie) {
        Genero genero = new Genero (id, nom, idMovie);
        listaGeneros.add(genero);
        for (int i = 0; i < catalogo.tamaño(); i++){
            if(catalogo.getPelicula(i).getId().equals(idMovie)){
               catalogo.getPelicula(i).setGenero(genero);
            }
        }
        
    }
    
   public boolean comprobarUsuari(String usuari){
        for (int i = 0; i < listClientes.size(); i++){
            if (listClientes.get(i).getUsuari().equals(usuari)){
                return true;
            }
        }
        return false;
    }
    public int comprobarLogin(String nom, String pass) {
       for (int i = 0; i < listClientes.size(); i++){
            if ((listClientes.get(i).getUsuari().equals(nom)) && (listClientes.get(i).getPassword().equals(pass))){
                return 1;
            }
       }
       if ((administradores.get(0).getUsuari().equals(nom)) && (administradores.get(0).getPassword().equals(pass))){
                return 2;
       }
       return 0;
    }

    void actualizarCliente(String nom, String pass){
        for (int i = 0; i < listClientes.size(); i++){
            if ((listClientes.get(i).getUsuari().equals(nom)) && (listClientes.get(i).getPassword().equals(pass))){
                listClientes.get(i).setVisualizacionesHoy(listClientes.get(i).getVisualizacionesHoy()+1);
                listClientes.get(i).setVisualizando(true);
            }
       }
    }

    public Cliente obtenerCliente(String nom) {
        for (int i = 0; i < listClientes.size(); i++){
            if (listClientes.get(i).getUsuari().equals(nom)){
                return listClientes.get(i);
            }
        }
        return null;
    }

    public void mostrarCatalogo() {
        catalogo.verCatalogo();
    }

    public Pelicula buscarPelicula(String titulo) {
        return catalogo.buscarPelicula(titulo);
    }

    public void reproducir(Pelicula pelicula) {
        catalogo.reproducir(pelicula);
    }
    
    
    public Catalogo obtenCatalogo(){
        return catalogo;
    }

    public void info() {
        for (int i = 0; i < listClientes.size(); i++){
            listClientes.get(i).info();
        }
    }

    

}
